package com.fly.controller;

import com.fly.bean.*;
import com.fly.service.CircuitryServiceO;
import com.fly.service.PoleServiceO;
import com.fly.service.SysProValueServiceO;
import com.fly.service.SysPropertiesServiceO;
import com.fly.util.Msg;
import com.fly.util.Page;
import com.fly.vo.AndPageVO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Auther: Orchid
 * @Date: 2019/11/27 20:23
 * @Description:
 */
@Controller
@RequestMapping("/poleOrchid")
public class PoleControllerO {

    @Resource
    PoleServiceO poleServiceO;

    @Resource
    CircuitryServiceO circuitryServiceO;

    @Resource
    SysProValueServiceO sysProValueServiceO;

    @Resource
    SysPropertiesServiceO sysPropertiesServiceO;

    /**
     * 分页查询杆塔信息
     * @param page 实体类
     * @return 返回分页数据，总页面数
     */
    @RequestMapping(value = "/getPoleByPage",method = RequestMethod.POST)
    @ResponseBody
    public Msg getPoleByPage(@RequestBody Page page) {

//        分页查询数据
        List<Pole> poles = poleServiceO.queryPoleByPage(page);

//        查询总数
        Integer count = poleServiceO.queryAllPoleCount();

//        添加返回数据，查询数据和总页数
        Msg msg = Msg.success().add("poles", poles);
        msg.add("count", count);

        return msg;
    }


    /**
     * 添加杆塔信息
     * @param poleNo 杆塔NO
     * @param activate 杆塔状态
     * @return
     */
    @RequestMapping("/addPole")
    @ResponseBody
    public Msg addPole(String poleNo, String circuitryNo, String activate) {

        //设置杆塔对应线路
        Circuitry circuitry = new Circuitry();
        circuitry.setCircuitryNo(circuitryNo);

        //查询配置id sysProId
        SystemProperties systemProperties = new SystemProperties();
        systemProperties.setSysProName("杆塔");
        systemProperties.setSysProDescribe("是否启用");

        //获取配置id
        Integer sysProId = sysPropertiesServiceO.querySysProIdById(systemProperties);

        //设置配置id
        systemProperties.setSysProId(sysProId);

        //设置状态信息查询参数
        SystemPropertiesValue systemPropertiesValue = new SystemPropertiesValue();
        systemPropertiesValue.setSysProValueName(activate);
        //设置配置参数的配置信息
        systemPropertiesValue.setSystemProperties(systemProperties);

        //查询状态对应id
        Integer id = sysProValueServiceO.querySysIdById(systemPropertiesValue);
        systemPropertiesValue.setId(id);

        //填充pole实体数据
        Pole pole = new Pole();
        pole.setPoleNo(poleNo);
        pole.setCircuitry(circuitry);
        //给杆塔添加状态信息
        pole.setSystemPropertiesValue(systemPropertiesValue);

        //获取线路NO
//        String circuitryNo = circuitryServiceO.queryCirNameById(circuitryId);

        if (circuitryNo != null && !circuitryNo.equals("") ){
            //判断线路编号是否存在
            Boolean isExitCir = circuitryServiceO.queryCountByNo(circuitryNo);

            if (!isExitCir){
                return Msg.fail().add("error", "该线路不存在");
            }else {
                pole.setPoleNo(circuitryNo+pole.getPoleNo());
            }
        }

        //判断杆塔编号是否存在
        boolean isExit = poleServiceO.queryPoleNoIsExit(pole);

//        存在返回错误信息
        if (isExit){
            return Msg.fail().add("error", "该编号已存在");
        }else {

            //根据no查询id
            Integer cirId = circuitryServiceO.queryIdByCirNo(circuitryNo);

            circuitry.setCircuitryId(cirId);
            pole.setCircuitry(circuitry);

            //添加数据
            Integer count = poleServiceO.addPole(pole);

            if (count > 0){
                return Msg.success().add("counts", count);
            }else {
                return Msg.fail().add("error", "添加失败");
            }
        }

    }

//    @RequestMapping("/updatePoleActive")
//    @ResponseBody
//    public Msg updatePoleActive(Pole pole) {
//
//        Integer isUp = poleServiceO.updateActive(pole);
//
//        if (isUp > 0){
//            return Msg.success();
//        }else {
//            return Msg.fail().add("error", "修改失败");
//        }
//
//    }

    /**
     * 根据线路名称和杆塔状态查询杆塔信息和杆塔No查询
     * @param poleNo 线路No
     * @param circuitryName
     * @param activate
     * @param page
     * @return
     */
    @RequestMapping("/getPolePageByCirIdAndActivate")
    @ResponseBody
    public Msg getPolePageByCirIdAndActivate(String poleNo, String circuitryName, String activate, Page page) {

        if (activate == null || activate.equals("")){
            activate = null;
        }

        if (poleNo == null || poleNo.equals("")){
            poleNo = null;
        }

        if (circuitryName == null || circuitryName.equals("")){
            circuitryName = null;
        }

        //设置查询参数
        AndPageVO andPageVO = new AndPageVO();
        andPageVO.setPage(page);

        //设置查询杆塔信息
        Pole pole = new Pole();
        pole.setPoleNo(poleNo);

        //设置杆塔对应线路信息
        Circuitry circuitry = new Circuitry();
        circuitry.setCircuitryName(circuitryName);

        //添加线路信息
        pole.setCircuitry(circuitry);



        //设置状态信息
        SystemPropertiesValue systemPropertiesValue = new SystemPropertiesValue();
        systemPropertiesValue.setSysProValueName(activate);

        pole.setSystemPropertiesValue(systemPropertiesValue);

        andPageVO.setPole(pole);

        //查询结果集合
        List<Pole> poleList = poleServiceO.queryPolePageByCirIdAndActivate(andPageVO);

        //返回结果集合
        return Msg.success().add("poles", poleList);
    }

    /**
     * 删除pole信息
     * @param poleId
     * @return
     */
    @RequestMapping("/deletePoleByPoleId")
    @ResponseBody
    public Msg deletePoleByPoleId(@RequestParam("poleId") Integer poleId){

        //判断是否有修改记录没有处理完全
        Boolean isDamage = poleServiceO.queryPoleIsDamage(poleId);

        if (isDamage){
            return Msg.fail().add("error", "该杆塔还有未完成修理记录，无法删除。");
        }

        Integer isDel = poleServiceO.deleteByPoleId(poleId);

        if (isDel > 0){
            return Msg.success();
        }else {
            return Msg.fail().add("error", "删除失败");
        }

    }

    /**
     * 根据id修改杆塔信息
     * @return 结果条数
     */
    @RequestMapping("/updatePoleById")
    @ResponseBody
    public Msg updatePoleById(String poleNo, String activate, String circuitryNo, Integer poleId){

        //判断输入的编号是否存在
        Boolean isExitCir = circuitryServiceO.queryCountByNo(circuitryNo);

        //如果不存在，返回不存在
        if (!isExitCir){
            return Msg.fail().add("error", "线路No输入错误，该线路不存在。");
        }

        //判断是否启用
        Boolean isUse = circuitryServiceO.queryCirIsUse(circuitryNo);

        if (!isUse){
            return Msg.fail().add("error", "该线路是停用状态，请先启用。");
        }

        //设置杆塔对应线路信息
        Circuitry circuitry = new Circuitry();
        //根据no查询线路id
        Integer circuitryId = circuitryServiceO.queryIdByCirNo(circuitryNo);
        circuitry.setCircuitryId(circuitryId);

        //获取状态配置id
        //设置配置信息查询参数
        SystemPropertiesValue systemPropertiesValue = new SystemPropertiesValue();
        systemPropertiesValue.setSysProValueName(activate);

        //获取pole对应配置信息id
        Integer sysProId = poleServiceO.querySysIdByPoleId(poleId);

        //用来查询状态配置id
        SystemProperties systemProperties = new SystemProperties();
        systemProperties.setSysProId(sysProId);

        systemPropertiesValue.setSystemProperties(systemProperties);
        //查询状态对应的配置信息id
        Integer id = sysProValueServiceO.querySysIdById(systemPropertiesValue);

        //设置状态对应配置id
        systemPropertiesValue.setId(id);

        //设置查询pole实体信息
        Pole pole = new Pole();
        pole.setPoleNo(poleNo);
        pole.setPoleId(poleId);
        //杆塔添加线路信息
        pole.setCircuitry(circuitry);
        pole.setSystemPropertiesValue(systemPropertiesValue);

        //判断编号是否有其他的编号使用
        Boolean isOtherExit = poleServiceO.queryPoleNoOtherIsExit(pole);

        if (isOtherExit){
            return Msg.fail().add("error", "该编号已经存在。");
        }

        //查询所属线路id
        Integer poleCirId = poleServiceO.queryPoleCirIsNull(poleId);

        if (poleCirId == null){
            pole.setPoleNo(circuitryNo + poleNo);
        }

        //修改pole信息
        Integer idUp = poleServiceO.updatePoleById(pole);

        if(idUp > 0){
            return Msg.success();
        }else {
            return Msg.fail().add("error", "修改错误");
        }

    }

    /**
     * 根据id查询具体杆塔信息
     * @param poleId 杆塔id
     * @return 杆塔信息
     */
    @RequestMapping("/getPoleByPoleId")
    @ResponseBody
    public Msg getPoleByPoleId(Integer poleId){

        //查询杆塔信息
        Pole pole = poleServiceO.queryPoleByPoleId(poleId);

        if (pole != null){
            return Msg.success().add("pole", pole);
        }else {
            return Msg.fail();
        }

    }

}
